人に聞けない痔の悩み、これでスッキリ >>

あってるかどうかの確認のようなものなのですが、
アンダーフローとはオーバーフローの反対語という認識で
あっているのでしょうか?
オーバーフローが異常だとしたら、
アンダーフローは正常な状態ってことであってますか?

できれば簡潔なお答えをお願いいたします。

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

A 回答 (3件)

正常な状態ではありません。



アンダーフローとは少々説明が面倒なのですが、
たとえば、5桁しかない電卓に
0.0001という数値は入力できますが
0.00001という数値は入力できないですよね?
こういう状態をアンダーフローと言います。

たとえば小数点以下5桁しか想定していない状態で
1÷100000の計算をすると答えは0.00001ですよね?
小数点以下は6桁ですので、小数点以下の桁あふれ
(アンダーフローエラー)が発生します。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
単純に、オーバーが上回るでアンダーが下回るで、
反対語なんだと思ってました。
確認しておいて正解でした・・・。
本当に助かりました^^

お礼日時:2002/09/25 14:59

 反対語ではないと思います。



 演算においては、ビット幅を越えて桁が溢れてしまうことをオーバーフローといい、限りな<0に近づいた小数が、精度を保てなくなる下位桁溢れをアンダーフローといいます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございましたー^^

お礼日時:2002/09/25 15:00

常識的には、



アンダーフロー <--> 正常範囲 <--> オーバーフロー

――ですね。
アンダーフロー/オーバーフローは、異常値という事で。
    • good
    • 1
この回答へのお礼

簡潔にお答えいただいて、ありがとうございます。
とても分かりやすいです。
つまりどちらも異常を意味していたんですね・・・。

お礼日時:2002/09/25 15:00

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

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

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

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

Q2進数の減算のオーバーフロー/アンダーフロー

2進数の減算のオーバーフロー/アンダーフロー

2進数の加減算においてどういうときにオーバーフローするのかわかりません。
例えば、
符号付き整数加算として、
1111+0001=10000
となり、4ビットで表現しきれないので、この場合オーバーフローということでしょうか?

基本的に、元々のビット列の長さ(この場合、4ビット)を演算後、超えてしまう
結果となった場合、オーバーフロー、アンダーフローが起きていると考えてしまって
よいのでしょうか?

10進数に変換して10進数の演算結果と異なることが分かれば、オーバーフローが
起きているといえるのでしょうが、ビット長が100ビットなど多ビット長の場合に
そのようなことはできないので、簡単なオーバーフロー、アンダーフローの見分け方が
知りたいです。

ご回答お願い致します。

Aベストアンサー

ハードウェアでは
・符号なしオーバーフロー: 最上位からのキャリー/ボローがあればオーバーフロー
・符号付きオーバーフロー: 最上位からのキャリー/ボローと結果の最上位が同じならオーバーフロー
で判定できる. たとえば符号付きの
1111 + 0001 = 10000
の場合, 「最上位からのキャリー」が 1 で「結果の最上位」は (4ビットなので) 0 だからオーバーフローしていない.
演算回路をハードウェアレベルで構成するような本なら書いてあるんじゃないかな.

Qオーバーフローについて教えてください。

複数のIT用語辞典で調べるとオーバーフローとはデータ型が扱える範囲の上限を超えてしまうこととありました。
とするとint型の場合 32,767を超えることはオーバーフローと言うのでしょうけど、–32,768を下回ることはなんと言うのでしょうか?

Aベストアンサー

IT用語も、常に同じ意味で使われるとは限りません。

上に溢れる「オーバーフロー」と、下に溢れる「アンダーフロー」です。
この上下の基準が変われば、値の変わります。

整数の場合
最大値から最小値までが「上下」と考えれば、最小値より小さくなってしまうのは「アンダーフロー」です。
精度で考えれば、負の最小値(絶対値が最大)より小さくなることは、取り得る値を越えてしまうので「オーバーフロー」です(特に「負のオーバーフロー」といったりします)。「アンダーフロー」は最小精度の1より小さくなってしまうことです。


検索でいくつかの「IT用語」を見てみましたが、「解説」と言えるほど詳しくは書いてないように思えました。
大体の意味を掴んだら、より詳しい解説をしているサイトとか本とかで調べなおすのがいいかと思います。

Qエクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

Q「該当」と「当該」の違い

辞書には、「該当」・・・その条件にあてはまること。「当該」・・・その事に関係がある。
・・・とあります。
“あてはまる”と“関係がある”、微妙に違うようで似ているようで、お恥かしいのですが私にははっきり区別ができないのです。
該当とすべきところを当該としたら、意味はまったく違ってくるでしょうか?
わかりやすく両者の違いや使い方を解説していただけませんか?宜しくお願いします。

Aベストアンサー

よく似た意味の言葉(名詞)ですが、

○該当…「する」をつけて「当てはまる」という意味の動詞として用いることができる

○当該…主に他の名詞の前につけて「今議論の対象になっている、まさにそのもの」という意味で内容を限定する形容詞的な形で用いる

といった違いがあります。逆の用法はありません。

・この条件に当該する人は申し出てください。

・○○事件につき、該当被告人を有罪に処す。

いずれもおかしな使い方で、反対でないとアウトです。

ご参考になれば幸いです。

Qプログラム設計書の書き方

僕は新人SEです。
今、上司の方からあるシステムの基本設計書・システム設計書・プログラム設計書を作り、プログラミングまでしてから単体テスト・結合テストもやるように言われています。(全て1人で)

おそらく経験のある方ならすぐにできてしまうようなシステムで、上司の方も勉強のために全てやらせているようです。

今、基本設計書・システム設計書まではなんとかできて、プログラム設計書の作成に取り掛かりたいのですが、初めての経験で実際のプログラム設計書には何をどのように書いているものなのかも全く見当もつかずにいるので全く何も書けません。

上司さんは今週忙しいようで
「来週見てあげるから自分で調べたりしてやってみて」
と言っています。
ですが、全く何もできずにいるのもイヤなので何かそれらしいものでも書いてみたいのですが…プログラム設計書とは何をどう書いてあるものなのでしょうか?

日本語が書いてあるのかプログラムが書いてあるものなのか…
そういったところからわからないので少しでも何か教えていただきたいです。
宜しくお願いします。

Aベストアンサー

こんにちは。
No.1様のご回答通りなのですが会社によって異なります。
というのを踏まえた上で・・・うちではという回答になりますが

・日付 2009/10/10
・版 初版(その後バージョンアップで改定するため、改定ナンバー必須)
・タイトル 企業情報印刷(ここでは決定済み名称)
・発注仕様書ナンバー(正式にお客さまと契約で決めた発注番号を記載)
・作成者 boo_boo_suu
・使用言語 Visual C++
・使用データベース ORACLE
・使用帳票アプリケーション Crystal Reports
・フロー図(Visioで埋め込み図)
・概要説明 
メインメニューから呼び出され企業情報の印刷条件を入力し、クリスタルレポートの帳票情報から企業情報ファイル(KIGYOU_INFO)ファイルを呼び出し印字します。
・全企業情報が一覧で印字可能である。
・特定一企業(企業コード指定)での印字も可能である。
・一企業が指定された場合は企業情報を画面表示する。

-----------------------------------
で・・・・プログラム仕様書はこのくらい。
命令書ですからコードそのものは打ちません。
これみて作ってもらわないといけないので日本語メインです。

あとはDBの仕様書をみてもらったりしてプログラムのローカルルール、画面サイズ、文字サイズ プロシージャ定義やら定数や変数、フォーム、構造体定義書などプログラム書くときの決まりごとに添ってPGさんに打ってもらっています。
一応、図とかつけてみました。(^-^;;
全体の雰囲気はこんな感じだとご理解いただければ幸いです。
ではでは~。

こんにちは。
No.1様のご回答通りなのですが会社によって異なります。
というのを踏まえた上で・・・うちではという回答になりますが

・日付 2009/10/10
・版 初版(その後バージョンアップで改定するため、改定ナンバー必須)
・タイトル 企業情報印刷(ここでは決定済み名称)
・発注仕様書ナンバー(正式にお客さまと契約で決めた発注番号を記載)
・作成者 boo_boo_suu
・使用言語 Visual C++
・使用データベース ORACLE
・使用帳票アプリケーション Crystal Reports
・フロー図(Visioで...続きを読む

Qint型からchar型への変換

タイトル通り、int型からchar型への変換の仕方がわかりません!><
どうしたらいいのでしょうか?

Aベストアンサー

#include <stdio.h>


char buf[5];
int no;

no = 10;
sprintf(buf, "%d", no);

Q加減剰余のオーバーフローについて

今C言語で加減剰余のプログラムを作っていて、
オーバーフローのチェックだけが上手くいきません。
limits.hをインクルードして、オーバーフローのチェック
を行いたいのですがどうすればよいのでしょうか?
扱いたい範囲はint型の-2147483648~2147483647です。
ちなみに開発環境はvc++2005です。

一応ソースを載せておきますので、よろしくお願いします。
#pragma warning ( disable : 4996 )

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <limits.h>

int main ( int argc, char *argv[] )
{
int start;//最初に入力する値(引数1)
int end;//最後に入力する値(引数3)
int kekka;//計算結果を格納
int amari;//除算の余りを格納
int max = INT_MAX;//表すことが出来る最大値
int min = INT_MIN;//表すことが出来る最小値

char enzansi;//入力する演算子 (引数2)
char str1[512];//格納用の配列を宣言(start用)
char str2[512];//格納用の配列を宣言(end用)

/*引数の個数チェック */
if ( argc != 4 ) {
printf ( "usage : %s start enzansi end\n", argv[0] );
exit ( 0 );
}

/*引数を取得して整数型に変換*/
start = atoi ( argv[1] );
end = atoi ( argv[3] );

/*引数の取得*/
enzansi = ( argv[2][0] );

sprintf ( str1, "%d", start );//str1に値を格納
sprintf ( str2, "%d", end );//str2に値を格納

/*str1とargv[1]による文字列の比較 */
if ( strcmp ( str1, argv[1] ) ) {
printf ( "error : 整数を入力して下さい。\n" );
exit ( 0 );

/*str2とargv[3]による文字列の比較 */
} else if ( strcmp ( str2, argv[3] ) ) {
printf ( "error : 整数を入力して下さい。\n" );
exit ( 0 );

/*argv[2]が2文字以上の場合 */
} else if ( strlen ( argv[2] ) >= 2 ) {
printf ( "error : 演算子を正しく入力して下さい。\n" );
exit ( 0 );
}

/*入力された演算子の条件ごとに計算 */
if ( enzansi == '+' ) {
kekka = start + end;
} else if ( enzansi == '-' ) {
kekka = start - end;
} else if ( enzansi == '*' ) {
kekka = start * end;
} else if ( enzansi == '/' ) {

/*startの値を0で除算する場合 */
if ( end == 0 ) {
printf ( "error : 0による除算は禁止です。\n" );
exit ( 0 );
}

kekka = start % end;//剰余を求める

/*割り算の結果として余りが出なかった場合 */
if ( kekka == 0 ) {
kekka = start / end;
printf ( "%d %c %d = %d", start, enzansi, end, kekka );
exit ( 0 );

/*割り算の結果として余りが出た場合 */
} else if ( kekka != 0 ) {
kekka = start / end;
amari = start % end;
printf ( "%d %c %d = %d余り%d", start, enzansi, end, kekka, amari );
exit ( 0 );
}



/*入力された演算子が異なる場合*/
} else {
printf ( "error : '+' '-' '*' '/'のいずれかの演算子を入力して下さい。\n" );
exit ( 0 );
}

/*数値1 演算子 数値2 = 演算結果の形式で出力する */
printf ( "%d %c %d = %d", start, enzansi, end, kekka );
exit ( 0 );
}

もし変な部分がありましたら指摘お願いします。
一応四則演算は問題なくできます。

今C言語で加減剰余のプログラムを作っていて、
オーバーフローのチェックだけが上手くいきません。
limits.hをインクルードして、オーバーフローのチェック
を行いたいのですがどうすればよいのでしょうか?
扱いたい範囲はint型の-2147483648~2147483647です。
ちなみに開発環境はvc++2005です。

一応ソースを載せておきますので、よろしくお願いします。
#pragma warning ( disable : 4996 )

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <limits...続きを読む

Aベストアンサー

★Werner さん、そうですね。注意書きするよりは goto を使うべきでしたね。
・それで追記としてサブ関数にした方が見やすいと付けましたが言葉が足りませんでしたね。
 質問者さんへ。main() 関数の for(;;) の部分がトリッキーでしたので書き直してみました。
 エラー表示の switch 文を void error_print(int errno); というサブ関数にしました。

// エラー表示
void error_print( int errno )
{
 char *errmsg; // エラー文字列を格納
 
 switch ( errno ){
  case ERR_USAGE:
   errmsg = "usage : %s start enzansi end";
   break;
  case ERR_INTEGER:
   errmsg = "整数を入力して下さい。";
   break;
  case ERR_INTOVER:
   errmsg = "整数型の範囲を超えました。";
   break;
  case ERR_ENZAN:
   errmsg = "演算子を正しく入力して下さい。";
   break;
  case ERR_DIVID:
   errmsg = "0による除算は禁止です。";
   break;
  case ERR_OVERFLOW:
   errmsg = "オーバーフローが起こります。";
   break;
 }
 puts( errmsg );
}

// main 関数
int main( int argc, char *argv[] )
{
 int kekka; // 計算結果を格納
 int ret; // 戻り値を受け取る
 
 /* (1)引数のチェック */
 if ( (ret = param_check(argc,argv)) != ERR_SUCCESS ){
  error_print( ret ); ←ここを関数にした。
  return ret;
 }
 
 /* (2)オーバーフローのチェック */
 if ( (ret = overflow_check(INT_MIN,INT_MAX)) != ERR_SUCCESS ){
  error_print( ret ); ←ここを関数にした。
  return ret;
 }
 
 /* (3)演算子による四則演算 */
 kekka = calc( start, enzansi, end );
 
 /* (4)演算結果を表示 */
 printf ( "%d %c %d = %d", start, enzansi, end, kekka );
 return 0;
}

その他:
・引き算のオーバーフローのロジックを整理すると
 (1)正数 - 正数
 (2)正数 - 負数
 (3)負数 - 正数
 (4)負数 - 負数
 の4タイプしかありません。
 このうち、(1)、(4)は int 型の範囲に納まるためチェックは不要です。
 あとは(2)、(3)の符号が異なるときに、それぞれオーバーフローのチェックを分けて
 記述すれば良い。詳しくは回答者 No.13 さんのアドバイスをどうぞ。
・以上。

★Werner さん、そうですね。注意書きするよりは goto を使うべきでしたね。
・それで追記としてサブ関数にした方が見やすいと付けましたが言葉が足りませんでしたね。
 質問者さんへ。main() 関数の for(;;) の部分がトリッキーでしたので書き直してみました。
 エラー表示の switch 文を void error_print(int errno); というサブ関数にしました。

// エラー表示
void error_print( int errno )
{
 char *errmsg; // エラー文字列を格納
 
 switch ( errno ){
  case ERR_USAGE:
   errm...続きを読む

Q構造体の中の構造体

typedef struct number{
int x;
struct number *next;
}Num;
初心者な質問で申し訳ないんですが、構造体の中に構造体があるのはどう解釈していいんでしょうか?
typedef struct number{
int x; int y; }Num;
の場合はNum a,b;がint a.x,a.y,b.x,b.yとなるのは分かるんですが・・・

Aベストアンサー

★構造体の中の構造体とは。
・構造体Aに構造体Bや構造体Cが入っていても普通の変数と同じに解釈すれば良いです。
 例えば
 // 構造体A
 typedef struct tagA_t {
  int a;
 } tagA;
 // 構造体B
 typedef struct tagB_t {
  int b;
 } tagB;
 // 構造体C(AとBを含む)
 typedef struct tagC_t {
  tagA A;
  tagB B;
  int c;
 } tagC;
・この場合は構造体Cに構造体Aと構造体Bが入れ子として入っています。
 『tagC CC;』と宣言すると
 『int CC.A.a』とか
 『int CC.B.b』というアクセスが出来ます。

本題:
・今回は構造体の中に自分自身の『構造体ポインタ』が入っています。
 これは『自己参照構造体』と呼ばれ『単方向リスト』、『双方向リスト』、『二文木』とかで
 データを管理できる構造を持っています。
・質問では『next』ポインタが1つですので『単方向リスト』を構成する構造体でしょう。
 他の回答者さんと同じですが『鎖』のように次々に『next』ポインタで繋げるのです。
 アクセス方法は
 Num a; // Num 構造体の実体
 Num *pa; // Num 構造体のポインタ
 
 pa = &a; // pa に a ポインタをセット
 pa->x = 123;
 pa->next;
 ↑
 ここまでは分かりますよね。
・もし next に2つ3つの構造体 Num がポインタで繋がれている状態ならば
 pa->next->x = 456;
 とか
 pa->next->next->x = 789;
 としてもアクセス(代入,参照)できます。
 ※詳しくは下の『参考URL』をどうぞ。
・以上。

参考URL:http://www9.plala.or.jp/sgwr-t/c/sec15-5.html,http://tdweb.cssa.chs.nihon-u.ac.jp/ds/ds02.html

★構造体の中の構造体とは。
・構造体Aに構造体Bや構造体Cが入っていても普通の変数と同じに解釈すれば良いです。
 例えば
 // 構造体A
 typedef struct tagA_t {
  int a;
 } tagA;
 // 構造体B
 typedef struct tagB_t {
  int b;
 } tagB;
 // 構造体C(AとBを含む)
 typedef struct tagC_t {
  tagA A;
  tagB B;
  int c;
 } tagC;
・この場合は構造体Cに構造体Aと構造体Bが入れ子として入っています。
 『tagC CC;』と宣言すると
 『int CC.A.a』とか
 『int CC.B...続きを読む

Qエクセルでセル内に斜線を引くには

Excel97です。表を作成し、いくつかのセル内で斜線を引きたいのですが、どういう操作をしたらいいですか、ご教示ください。

Aベストアンサー

下記のURLを参照してください。
写真いりでわかりやすくなっています。

参考URL:http://www.excel-jiten.net/cell_format/ruled_line_change_slash.html

Q未、済、完了の英訳は?

前回類似件名で質問したのですが、
質問の仕方があまり良くなかったと思い質問し直させて頂きます。

ある項目に対して「未」、「済」、「完了」のいずれかを選択させたい帳票があるのですが、
これを英語で実現するにはどのような単語が当てはまるのでしょうか?(1,2語程度で)
「済」、「完了」については「done」が好ましいのかなと思っていますが
いかがでしょうか?

宜しくお願い致します。

Aベストアンサー

No. 2 です。

なるほど。。。
そういうことなのでしたら、“Done” と “Not Yet” が適切だと思います。

“Yet” は単独で用いられる場合、『まだ~ない』という意味に取られることはなく、接続詞の『でも』の意味で取られます。
なので、選択肢が “Done” と “Yet” であったとしても、理解してもらえない可能性が残ります。
それを排除するためには、“Not Yet” とするべきだと思います。

ご参考まで。^^


人気Q&Aランキング