整数、単精度(float)、倍精度(double)の変数変換、各種書式付出力について教えてください。

また、よろしければ、40桁の整数、有効数字20桁の実数、小数点以下15桁の実数を表示する方法について教えてください。

本当にC言語の初歩だとは思いますが教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

変換というと


int型←→doubleはキャストすることで簡単に変換できます。
int i;
double d;
d = (double)i; int→double
出力って、普通にprintfやcoutを使います。
printf("%lf",d);

40桁の整数20桁の実数は直接は扱えません。longは4バイト、doubleは8バイトです。
linuxだと確かlong double(10バイト)がつかえますが
、有効数字20桁には届きませんね。
まずはシフト演算やビット演算、浮動小数点について知り
構造体を使う関数、またはクラスを自作するしかありません
世には既にそういうライブラリーがあるらしいので
それをダウンロードして使う手もあります。

その辺りはC言語の初歩というか
どちらかというと情報処理、数学の話かと思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRed Tubeというサイトについて

こんにちは。
おはずかしながら知り合いにRed Tubeというサイトを教えてもらってダウンロードしてみたところ、その日以来パソコンが異常に重くなって普通のYou Tubeなどもコマ送りほどの速度でしか見れなくなりました。
通常のサイトも重くてなかなか動きません。

しょがないのでし捨てうの復元もやったのですが、どんなに昔に戻しても言うこと効きません。
ウィルス検地をやっても何も出て来ません。
どうすれば元の状態に戻るのでしょうか?

ちなみにパソコンは12月6日に買ったばかりの新品です。
重くて何もできない状態です。

どなたかお教えいただけないでしょうか?

Aベストアンサー

Redtubeはタダのストリーム海外動画サイトなだけで、見たところで重くなったりすることはありません。
そもそもダウンロードって? 何を使って動画を落としたの?
高々MP4かFLV落としたところで重くなったりもしませんし、ストリームデータにウイルス仕込むことはできません。

動画以外に余計なものを落としたんでしょう。
動画リストの脇にある チャットクライアントソフトとか。それをシステム上から消さなければいけませんが
システムから消去するのは、玄人でも苦労しますので、やるだけやってダメならOSのクリーンインストールですね。

Q実行結果を倍精度浮動小数点数(double)で表示させたいです

C言語の勉強をしている大学生です。
プログラミングをしている中で、質問が3つほど出てきました。
互いに関連しているのでまとめて質問させてください。

無限等比級数を計算するプログラムを作成しました。
これをコンパイルして実行すると、double型で定義しているのに
小数点以下7桁となってしまいます。
doubleは15桁ということなので、15桁で出力したいのです。
これが1つめの質問です。

<実行結果>
input n:10
1.500000
1.750000
1.875000
1.937500
1.968750
1.984375
1.992188
1.996094
1.998047

pow関数がmath.hに含まれているのかも定かではなく、
インターネットでmath.hというものがあると書いてあったので、
インクルードしてみましたが、これは適切でしょうか?
これが2つめの質問です。

最後になりますが、インターネットで多倍長ライブラリというものが
あるということを知りましたが、この使用方法がわかれば具体的な例を
挙げながら教えていただきたいと思います。

------------------------------------------------------------
#include <stdio.h>
#include <math.h>

int main(void)
{
int n;
int i;
double total;

printf("input n:");
scanf("%d",&n);

if (n<1){
printf("unable\n");
return 0;
}

for(i=1; i<n; i++){
total += 1.0 / pow(2.0,i);
printf("%f\n",total+1.0);
}


}
------------------------------------------------------------

C言語の勉強をしている大学生です。
プログラミングをしている中で、質問が3つほど出てきました。
互いに関連しているのでまとめて質問させてください。

無限等比級数を計算するプログラムを作成しました。
これをコンパイルして実行すると、double型で定義しているのに
小数点以下7桁となってしまいます。
doubleは15桁ということなので、15桁で出力したいのです。
これが1つめの質問です。

<実行結果>
input n:10
1.500000
1.750000
1.875000
1.937500
1.968750
1.984375
1.992188
1.996...続きを読む

Aベストアンサー

はじめ2つだけ.
1)printf関数は桁数等を制御する記法が存在します.
%fの部分をたとえば%1.15fとかくと,精度が15桁となります.
2)計算結果を見れば.合っていることがわかるのでは?

参考URL:http://wisdom.sakura.ne.jp/programming/c/c57.html

QAdobe Reder6.0.4のアンインストールの順番で悩んでいます。

WinXPを使用しています。
Adobe Reder6.0から7.0へバージョンアップする際にAdobe Reder6.0.4のアンインストールの順番で悩んでしましました。

プログラムの追加と削除を開くと以下のファイルがありました。
Adobe Acrobet-Reder6.0.2updete
Adobe Acrobet-Reder6.0.3updete
Adobe Acrobet-Reder6.0.4updete
Adobe Reder6.0.1-Japanese

最初に削除するのは、6.0.4updeteからで、
6.0.3→6.0.2→Adobe Reder6.0.1-Japanese
とした方がいいのか、それとも特に順番は考えなくてもいいのでしょうか?

どうか、よろしくお願いいたします。

Aベストアンサー

お考えの
6.0.4updete→6.0.3→6.0.2→Adobe Reder6.0.1-Japanese
が一番良いと思います。
Adobe Readerでは経験ないですが、前のバージョンを削除すると後のバージョンはなくなり、変にファイルが残ることがありました。

付け加えるなら、Adobe Reder6.0.1-Japaneseを削除した後、C:\Program Files\Adobeフォルダ(の中身)も削除された方がいいのではないでしょうか。
過剰になるなら、他にもAdobeフォルダは残ってますので、検索かけてみてください。

QC言語:double型での戻り値は小数点以下何桁ですか?

Cでプログラミングの勉強をしています。

double型で宣言した変数をprintfで出力するとき、代入した数値は小数点以下1桁なのに、なぜか出力結果では6桁になると問題集に書かれていました。解説はありません。

プログラムは下のものですが、なぜかお分かりになる方、教えていただけませんか?

#include<stdio.h>
struct test{
int x;
double y;
}
void print(struct test a);
void set_value(struct test a);

void main(void){
struct test a ={1, 2.0};
set_value(a);
print(a);
}
void print(struct test a){
printf("a.x = &d, a.y= %f\n", a.x, a.y);
}
void set_value(struct test a){
a.x =10;
a.y =20.0;
}

Cでプログラミングの勉強をしています。

double型で宣言した変数をprintfで出力するとき、代入した数値は小数点以下1桁なのに、なぜか出力結果では6桁になると問題集に書かれていました。解説はありません。

プログラムは下のものですが、なぜかお分かりになる方、教えていただけませんか?

#include<stdio.h>
struct test{
int x;
double y;
}
void print(struct test a);
void set_value(struct test a);

void main(void){
struct test a ={1, 2.0};
set_value(a);
pr...続きを読む

Aベストアンサー

単に桁数を指定していないからです。
何も指定しない場合、 printf は小数点以下を
6桁表示するようになっています。
そもそも、double は浮動小数点数なので
保持する桁数は予め決まっています。

後ついでに細かいミスをなどを、、、

[1] 最後のセミコロンを忘れています。
struct test {省略};

[2] &d ではなく %d です。
printf("a.x = %d, a.y= %f\n", a.x, a.y);

[3] \n ではなく \n です。
printf("a.x = %d, a.y= %f\n", a.x, a.y);

[4] set_value はポインタ渡しで。
int main() {
set_value(&a);
}
void set_value(struct test *a) {
a->x = 10;
a->y = 20.0;
}

Q「Color.red」の文法について

 java初心者です、宜しくお願いします。

 「setBackground( Color.red ) ;」、「setBackground( Color.RED ) ;」と書いてもエラーは出ません。
 「Color.RED」は「ColorクラスのREDというフィールド」という内容だと思うのですが、 「Color.red」の
「red」の構文はどのような文法になっているのでしょうか。

 何故小文字でもエラーにならないのでしょうか、小文字でも「フィールド」としてエラーではないの
でしょうか。

 宜しくお願いします。

Aベストアンサー

迷ったら、まずはマニュアルを読んでみましょう

Color.RED
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#RED

Color.red
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#red


どちらも public static final Color で、文法的には同じものです。
エラーにならないのは、両方定義されているから。


大文字小文字を区別していない、とかでは無いことは、例えば次の例ではっきりします。
Color.DARK_GRAY
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#DARK_GRAY

Color.darkGray
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#darkGray

これらは、 dark_grayやDARKGRAYでは未定義でエラーになります。

迷ったら、まずはマニュアルを読んでみましょう

Color.RED
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#RED

Color.red
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#red


どちらも public static final Color で、文法的には同じものです。
エラーにならないのは、両方定義されているから。


大文字小文字を区別していない、とかでは無いことは、例えば次の例ではっきりします。
Color.DARK_GRAY
http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#DARK_GR...続きを読む

Q浮動小数点の小数点3桁を。。。

宜しくお願いします。C言語を使い三角関数の計算を行っております。小数点3位以下は四捨五入にしたいのですが、そのような関数が有りますでしょうか?
環境はQuickC(MSDOS)です。
もしなければ文字列にでも変換し直して行うのでしょうか?一般的な方法など御在ましたらお教え下さい。
宜しくお願いします。

Aベストアンサー

負の数の対応は必要ですか?
負の場合の四捨五入の定義は「絶対値の四捨五入に符号を付加」でいいですか?

「絶対値の四捨五入に符号を付加」でオッケーなら、#1,#2,#3の回答に符号処理の処理を加えてください。

Qcross red lineの意味

cross red lineってどういう意味ですか?

以下のサイトで見ました。
【Don't cross red line, US asks Karzai govt】
http://www.pajhwok.com/en/2010/10/07/dont-cross-red-line-us-asks-karzai-govt

Aベストアンサー

「安易な妥協をする」 という意味ではないかと思います。

red line は 「アイスホッケーのリンクを分ける線」 (下記の辞書による) のこと。
 → http://ejje.weblio.jp/content/red+line

つまり、その線を越えると 「出すぎ」 であるということになる。

また、a point beyond which a person or group is not prepared to negotiate という定義が下記の辞書でにあります。
 → http://www.thefreedictionary.com/red+line

普通のイメージとしては A safety limit, as marked on a gauge といったところでしょう (上記の辞書による)。

アメリカ政府としては、アフガニスタン政府がタリバンと話し合いのテーブルにつくことに異論をさしはさむつもりはない。けれど、基本ラインはあくまでも譲るな、それを譲ってまで妥協することは認めない、というのがアメリカ側の態度なんでしょう。

Q単精度計算と倍精度計算

F(x)=(1-x・x)1/2乗において、xの値を0.9、0.99、…0.99999と変化させた場合の単精度計算と倍精度計算の結果を求めるプログラムを教えてください。

Aベストアンサー

#include <stdio.h>
#include <math.h>

int main(){
  double dx;
  float fx;
  double tempd = 1.0f;
  float tempf = 1.0f;

  for(int i = 0;i < 5;i++){
    tempd *= 0.1f;
    printf("x = %-5.5f\n",1.0f-tempd);
    dx = 1.0f - tempd;
    printf("double = %-15.15f\n",sqrt(1.0f-dx*dx));

    tempf *= 0.1f;
    fx = 1.0f - tempf;
    printf("float = %-15.15f\n\n",sqrt(1.0f-fx*fx));
  }

  return 0;
}

こういうこと?

Qredを構築って?

メキシコの知人から、「redを構築中だがoffice97なので適合しない。office2000にしたい」とメールがきました。
redを構築ってどういう意味なんでしょう?
ちなみに「従来のメールアドレスは電話回線で、社内redと適合しない」
とも書いてありました。
OSなどは不明です。
redを構築の意味がわかる方教えて下さい。LANのようなもの??
よろしくお願いします。

Aベストアンサー

「ごめん、REDってよくわからないんだけど、LANみたいなもの?」
という質問をそのメキシコの知人にしてみたらいいのではないでしょうか?

REDというものについては、略語辞典のページ
http://www.sde.co.jp/hyper-acronym/abdic_r.html
に記述をみつけましたが、そのメールの内容とはちょっと意味が食い違うようです。(^^;

参考URL:http://www.sde.co.jp/hyper-acronym/abdic_r.html

Qdoubleとfloatについて

#include <stdio.h>

int main()
{
float height,weight;

printf("身長と体重を入力してください。\n");
scanf("%f",&height);
scanf("%f",&weight);

printf("身長は%fセンチ:体重は%fキロです。\n",height,weight);

return 0;
}

上記のようなプログラムを作って、身長には175.1体重には56.1という入力を行なって実行したところ、
身長は175.100006センチ:体重は56.099998キロです。
という結果が返ってきました。
heightとweightをdouble型で宣言したところ(もちろんscanf文の変換仕様は%lfにしています。)、結果は
身長は175.100000センチ:体重は56.100000キロです。
と私が、期待していたものが返ってきました。なぜfloat型だと期待通りの結果が返ってこないのでしょうか?ご教授お願い致します。

#include <stdio.h>

int main()
{
float height,weight;

printf("身長と体重を入力してください。\n");
scanf("%f",&height);
scanf("%f",&weight);

printf("身長は%fセンチ:体重は%fキロです。\n",height,weight);

return 0;
}

上記のようなプログラムを作って、身長には175.1体重には56.1という入力を行なって実行したところ、
身長は175.100006センチ:体重は56.099998キロです。
という結果が返ってきました。
heightとweightをdouble型で宣言したところ(もちろんscanf文...続きを読む

Aベストアンサー

ご質問は,いわゆる2進数計算のまるめ誤差のことでしょうか.

問題は,2つあると思います.
 ・循環小数を有限ケタで切ること

 ・何桁まで表示するか?

という問題です.


・循環小数を有限ケタで切ること
コンピュータの内部は,一部を除き,
「2進数」で処理されています.

少数点以下の表し方の中には,10進数だときっちり表せるものが,2進数では,循環小数のようになって有限のケタでは正確に表せない場合が出てきます.

つまり,10進数だと
 0.1 (10^-1)
0.01 (10^-2)
0.001 (10^-3)
として,区切りですが,
2進数だと,
 0.5 (2^-1)
0.25 (2^-2)
0.125 (2^-3)
0.0625 (2^-4)
0.03125 (2^-5)
0.015625 (2^-6)
0.0078125 (2^-7)
0.00390625 (2^-8)
となり,たとえば,0.1は
 0.1(10進数) = 0*0.5 + 0*0.25 + 0*0.125 + 1*0.0625 + 1*0.03125 + 0*0.015625 + 0*0.0078125 + 1*.00390625 + ...

= 0.00011001... (2進数)
となり,2進数の世界では循環小数となります.
これを有限のケタで切ると誤差ができます.

つまり,2進数の有限のケタであらわした
0.1(10進数)を10こ足しても,
 1になりません.

・何桁まで表示するか?
そうはいっても,単精度でも,通常の使用には十分
耐える精度は持っています.
 表示桁数を少なくして,四捨五入してしまえば
みためには正解にみえるものも表示できます.
 多くの計算結果は,そのようにして表示されています.

 たとえば,さきほどの
0.00011001... (2進数)
    = 0*0.5 + 0*0.25 + 0*0.125 + 1*0.0625 + 1*0.03125 + 0*0.015625 + 0*0.0078125 + 1*.00390625
= 0.09765625 (10進数)
です.少数第3位で四捨五入すれば,
   0.1 (10進数)
です.

ご質問では,倍精度ではただしいという結果が出ていますが,0.1は2進数では循環小数ですから,倍精度といえども内部表現は不正確です.
ここでの差は単なる表示桁数の差でしょう.
単精度は,10進数で7ケタ
倍精度は,10進数で14ケタ
の精度を持っています.ご質問では,9ケタ程度表示していますので,その差がでていると思います.

ご質問者は,「電卓だとちゃんと表示するじゃないか」と思われると思います.
実は,電卓などの会計にしようされるものには,上記のような不正確さは許されません.
よって,「10進補正」といいまして,
10進数で正確に表せるように内部計算を10進数で行っているのです.
このような補正をすれば,計算速度はかなり落ちますが,10進数であらわしたものは正確に計算できます.
事務用のマシンでこの機能をもったものが多いようです.
おおくのコンピュータは,処理速度が命ですから,
2進数で計算していますだから,このような誤差は認識した上で使用すべきでしょう.



この誤差を避ける方法として,「固定小数点方式」
といいまして,
 0.1を1000000 * 0.0000001
としてあらわし,計算はすべて,整数でおこない表示だけを小数点をつけてあらわす方法です.この方法だと,整数で計算するので,上記の誤差はでません.
ただし,この方法では,極端に大きな数字
たとえば,6.02*10^24 を表すことが出来ません.
極端に小さな数字 8.854*10^-24などもあらわせません.

また,ちなみに,最近のCPUは,浮動小数計算専用のハードを実装していて,単精度も倍精度も計算時間は変わりません.ただし,メモリは倍必要になります.メモリさえゆるせば,私はすべて倍精度としています.
また,C言語では,言語の簡単化のためか,変数にfloatは存在していますが,計算時の内部処理はすべていったん倍精度に変換されてから行われます.
(単精度を倍精度に変換しても,精度はあがりませんが.)

ご質問は,いわゆる2進数計算のまるめ誤差のことでしょうか.

問題は,2つあると思います.
 ・循環小数を有限ケタで切ること

 ・何桁まで表示するか?

という問題です.


・循環小数を有限ケタで切ること
コンピュータの内部は,一部を除き,
「2進数」で処理されています.

少数点以下の表し方の中には,10進数だときっちり表せるものが,2進数では,循環小数のようになって有限のケタでは正確に表せない場合が出てきます.

つまり,10進数だと
 0.1 (10^-1)
0.01 (10^-2)
...続きを読む


人気Q&Aランキング